NumPy (Numerical Python) je Pythonovská knižnica, ktorá je určená pre prácu s viacrozmernými homogennými poliami.
Ďalšie informácie:
V tomto kurze budeme pracovať výlučne s jednorozmernými poliami.
import numpy as np
Príklady:
>>> np.info(np.array)
>>> np.array?
>>> np.array*?
>>> np.lookfor('array')
Tu sa zoznámime s dvoma základnými spôsobmi konštrukcie poľa typundarray
.
Z nejakého kontajneru, napr. zo štandartného pythonovského poľa (list
):
>>> A = np.array([0, 1, 2, 3]) # testovacie pole
>>> A
>>> print(A)
>>> len(A)
>>> type(A)
>>> A.dtype # atribút: typ prvkov v poli
Funkcia np.arange
vytvorí pole typu ndarray
analogickým spôsobom ako pythonovský generátor range
.
>>> np.arange(10) # pole 10 čísel od 0 po 9
>>> np.arange(1, 9, 2) # argumenty: od, do (vylučujúce), krok
Je to obyčajná funkcia, nie generátor!
Funkcia np.linspace
vytvorí pole typu ndarray
s prvkami, ktoré tvoria homogénne delenie uzavretého intervalu.
>>> np.linspace(0, 10, 100+1) # argumenty: od, do (vrátane), počet prvkov (štandardne 50)
Funkcie np.zeros
a np.ones
vytvoria polia typu ndarray
zo samých núl resp. zo samých jednotiek.
>>> np.zeros(10) # argument: dĺžka poľa
>>> np.ones(10) # argument: dĺžka poľa
Funkcia np.random.randint
vytvorí pole typu ndarray
z náhodne vygenerovaných čísel.
>>> np.random.randint(1, 100, size=10) # argumenty: od, do (vylučujúce), počet prvkov
V tejto časti sa zoznámime s funkciami, ktoré umožňujú operovať na poliach typu ndarray
po prvkoch. Tieto operácie sa nazývajú univerzálne funkcie (ufunc
).
>>> np.lookfor('ufunc')
>>> np.info('ufunc')
Binárne operácie, kde jeden argument je pole typu ndarray
a druhý argument je skalár.
>>> A = np.array([1, 2, 3, 4]) # testovacie pole
>>> A + 2
>>> A - 2
>>> A * 2
>>> A / 2
>>> A ** 2
>>> 2 + A
>>> 2 - A
>>> 2 * A
>>> 2 / A
>>> 2 ** A
>>> A ** 2 + 2 * A + 1
Binárne operácie, kde oba argumenty sú polia typu ndarray
.
>>> A = np.array([1, 2, 3, 4]) # testovacie pole
>>> B = np.array([8, 7, 6, 5]) # testovacie pole
>>> A + B
>>> A - B
>>> A * B
>>> A / B
>>> A ** B
>>> A * A + 2 * A * B + B * B
Výsledkom porovnania je boolovské pole typu ndarray
. Jeden argument je pole typu ndarray
a druhý argument môže byť skalár.
>>> A = np.array([1, 9, 4, 6, 3, 8]) # testovacie pole
>>> A < 5
>>> A % 2 == 0
>>> B = np.array([2, 8, 4, 7, 3, 6]) # iné testovacie pole
>>> A == B
>>> A <= B
Výrokovologické operácie aplikované na boolovské polia typu ndarray
.
>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> ~(A < 50) # negácia
>>> (A < 50) & (A % 2 == 0) # konjunkcia
>>> (A < 50) | (A % 2 == 0) # disjunkcia
>>> A = np.array([0, 1, 2, 3, 4]) # testovacie pole
>>> np.exp(A) # exponenciálna funkcia s prirodzeným základom
>>> np.exp2(A) # exponenciálna funkcia so základom 2
>>> A = np.array([1, np.exp(1), np.exp(2), np.exp(3), np.exp(4)]) # testovacie pole
>>> np.log(A) # prirodzený logaritmus
>>> B = np.array([1, 2, 4, 8, 16]) # iné testovacie pole
>>> np.log2(B) # logaritmus pri základe 2
>>> A = np.array([0, np.pi/4, np.pi/2]) # testovacie pole
>>> np.sin(A) # sínus
>>> np.cos(A) # kosínus
>>> B = np.array([-np.pi/4, 0, np.pi/4]) # iné testovacie pole
>>> np.tan(B) # tangens
>>> A = np.array([0, 1/np.sqrt(2), 1]) # testovacie pole
>>> np.arcsin(A) # arkussínus
>>> np.arccos(A) # arkuskosínus
>>> B = np.array([-1, 0, 1]) # iné testovacie pole
>>> np.arctan(B) # arkustangens
Polia typu ndarray
môžme indexovať podobne ako štandartné pythonovské polia (list
):
>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> A[0]
>>> A[2]
>>> A[-1]
>>> A[0] = 111 # priradenie
>>> A
Rezy nad poliami typu ndarray
majú podobnú syntax ako pre štandartné pythonovské polia (list
):
>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> A[2:9:3] # argumenty: od, do (vylučujúce), krok
>>> A[:4]
>>> A[1:3]
>>> A[::2]
>>> A[3:]
>>> A[5:] = -1 # priradenie do rezu
>>> A
>>> B = np.random.randint(1, 100, size=5) # iné testovacie pole
>>> print(B)
>>> A[5:] = B[::-1] # priradenie do rezu
>>> A
Pre rezy môžme použiť masky. Sú to boolovské polia typu ndarray
.
>>> A = np.random.randint(1, 100, size=20) # testovacie pole
>>> print(A)
>>> A[(A < 50) & (A % 2 == 0)] # extrakcia podpoľa pomocou masky
>>> A[(A < 50) & (A % 2 == 0)] = 222 # priradenie do rezu určeného maskou
>>> print(A)
Funkcia np.min
vráti najmenší prvok v neprázdnom poli typu ndarray
.
>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> np.min(A)
Funkcia np.max
vráti najväčší prvok v neprázdnom poli typu ndarray
.
>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> np.max(A)